/* File Info
 * Author:      李佳乐
 * CreateTime:  2023/12/25 13:58:37
 * LastEditor:  李佳乐
 * ModifyTime:  2023/12/25 14:25:15
 * Description: 详解static的用法，类中若有static变量，则被这个类所有的对象所共享一个(同一内存地址),这个变量只能被类中static方法修改，
 * 类的static方法只能修改static变量其本身并没有this指针。
 * 若像创建一个只能被实例化一次的类，则可以将构造函数放入private中，并在public区创建一个接口函数，具体方法如下
 */

#include <iostream>

using namespace std;

class a
{
public:
    static a &getInstance()
    {
        static a obj; // 唯一实例
        return obj;
    }
    static int getNum();
    static void setNum(const int &x);

private:
    a(); // 放在private中，现在不能再创建此类的对象
    ~a();
    static int num;
};

int a::num = 0; // static的变量需要初始化，所有这个类的对象共享一个变量(同一内存单元)

inline int a::getNum()
{
    return num;
}

inline void a::setNum(const int &x)
{
    num = x;
}

int main()
{
    // a a1;
    // a a2;
    cout << "a1.num = " << a::getInstance().getNum() << endl;
    // cout << "****************" << endl;
    // a::getInstance().setNum(2);
    // cout << "a1.num = " << a::getInstance().getNum() << endl;
    system("pause");
}
